package com.vf.s.mvc.sync.common.util;

import com.jfinal.ext.kit.DateKit;
import com.jfinal.kit.StrKit;
import com.jfinal.log.Log;
import com.vf.core.render.RenderBean;
import com.vf.s.common.model.biz.BizLayer;
import com.vf.s.common.model.sync.BizSyncDataTask;
import com.vf.s.mvc.sync.common.model.DataTotal;
import com.vf.s.mvc.sync.common.task.http.HttpUtil;
import com.vf.s.mvc.sync.common.task.http.handle.PointExecutor;

import net.sf.json.JSONObject;

public class PageUtil {
	
	protected final static Log LOG = Log.getLog(PageUtil.class);

	
	public  static void handle(BizLayer bizLayer,BizSyncDataTask task) {
		// 调用接口获取数据总量
		RenderBean result = null;
		if (StrKit.equals("GET", task.getMethod())) {
			result=HttpUtil.doGet(
					task.getUrl(), task.getId(), task.getCode(),task.getName(),
					DateKit.toStr(task.getLastTime(), "yyyy-MM-dd hh:mm:ss "),
					DateKit.toStr(task.getLastTime(), "yyyy-MM-dd hh:mm:ss ")
					,0,
					task.getParam(),1, task.getPageSize());
		} else {
		}
		
		if(result==null) {
			task.setNextTime(TimeUtil.getNextTime(task));
			task.update();
			LOG.debug(String.format("【%s】接口异常，不执行!!!", task.getName()));
			return;
		}
		
		if(result.getCode()!=200) {
			task.setNextTime(TimeUtil.getNextTime(task));
			task.update();
			LOG.debug(String.format("【%s】接口异常，不执行!!!", task.getName()));
			return;
		}
		
		DataTotal dataTotal = null;
		try {
			JSONObject jsonObject = JSONObject.fromObject(result.getData());
			dataTotal = (DataTotal) JSONObject.toBean(jsonObject, DataTotal.class);
			if (dataTotal == null) {
				task.setNextTime(TimeUtil.getNextTime(task));
				task.update();
				LOG.debug(String.format("【%s】接口异常，不执行!!!", task.getName()));
				return;
			}
		}catch (Exception e) {
			task.setStatus("0");
			task.update();
			LOG.debug(String.format("【%s】接口异常，停止执行!!!", task.getName()));
			return;
		}

		if (dataTotal.getSize() == 0) {
			task.setNextTime(TimeUtil.getNextTime(task));
			task.update();
			LOG.debug(String.format("【%s】接口成功，同步数据量【%s】!!!", task.getName(),dataTotal.getSize()));
			return;
		}
		
		
		long total = dataTotal.getSize();
		int pageSize = task.getPageSize();
		long totalPage = getPages(total, pageSize);
		// 分线程拉取数据
		
		
		//什么鬼
		//点 -坐标 、属性（文本、视频、图片、全景、属性）、过滤条件
		//线 -坐标 、属性（文本、视频、图片、全景、属性）、过滤条件
		//面 -坐标 、属性（文本、视频、图片、全景、属性）、过滤条件
		task.setLockTime(0);task.update();
		
		PointExecutor pointExecutor=new PointExecutor();
		pointExecutor.handle( bizLayer, task, dataTotal, totalPage);
	}

	// 总数据量

	// 上次拉取结束 时间
	

	/**
	 * 总页数
	 * @param total    总数
	 * @param pageSize 每页显示数
	 * @return
	 */
	private static long getPages(long total, int pageSize) {
		return (total + pageSize - 1) / pageSize;
	}


}
